import express from "express";
import {authenticateToken} from "../../config/auth.js";
import menuServices from "../../services/user/menuServices.js";
import ResponseHandler from "../../utils/responseHandler.js";
import asyncHandler from "../../utils/asyncHandler.js";

const menuRouter = express.Router();

/**
 * @description 创建菜单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
menuRouter.post('/createMenu',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const errorMessage = await menuServices.createMenu(req.body);
        if (errorMessage) {
            return await ResponseHandler.responseResult(res, null, errorMessage); // 返回错误信息
        }
        return await ResponseHandler.responseResult(res, null, '菜单创建成功'); // 返回成功信息
    })
);

/**
 * @description 获取所有菜单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
menuRouter.get('/getAllMenus',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const allMenus = await menuServices.getAllMenus();
        return await ResponseHandler.responseResult(res, allMenus, '获取菜单列表成功'); // 返回菜单列表
    })
);

/**
 * @description 批量更新菜单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
menuRouter.post('/updateMenus',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const {menus} = req.body; // 假设请求体中包含一个 menus 数组

        // 确保 menus 数组存在并且非空
        if (!Array.isArray(menus) || menus.length === 0) {
            return await ResponseHandler.responseResult(res, null, '菜单数据缺失或格式错误');
        }

        // 执行批量更新
        const errorMessage = await menuServices.updateMenu(menus);
        if (errorMessage) {
            return await ResponseHandler.responseResult(res, null, errorMessage); // 返回错误信息
        }

        return await ResponseHandler.responseResult(res, null, '菜单更新成功'); // 返回成功信息
    })
);


/**
 * @description 删除菜单
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
menuRouter.post('/deleteMenu',
    authenticateToken,
    asyncHandler(async (req, res) => {
        const {menuId} = req.body;

        // 确保 menuId 存在
        if (!menuId) {
            return await ResponseHandler.responseResult(res, null, '菜单 ID 缺失');
        }

        const result = await menuServices.deleteMenu(menuId);
        if (result) {
            return await ResponseHandler.responseResult(res, null, '菜单删除失败'); // 返回错误信息
        }
        return await ResponseHandler.responseResult(res, null, '菜单删除成功'); // 返回成功信息
    })
);

export default menuRouter; // 导出菜单路由
